package org.ch02.test04;

import org.ch02.entity.Student;

import java.lang.reflect.Method;

/**
 * 反射常用 API - Method - 类的方法
 *
 * @author lwj
 * @date 2025-03-18
 * @vesion 1.0.0
 */
public class MainTest03 {
    public static void main(String[] args) throws Exception {
        // 第一：获取操作类的 Class 对象
        Class<?> clazz = Student.class;

        // 第二：基于 Class  对象，实现相关的操作 - 运行时，动态性 - 框架，工具
        // 1.实例化对象
        Object object = clazz.getConstructor().newInstance();

        // 2.获取类中指定名称的方法对象 - 必须指定方法参数类型的 Class 对象
        // getDeclaredMethod(方法名称, Class<?>... 方法参数类型的 Class 对象)
        // sleep(String address,int hour)
        Method sleepMethod = clazz.getDeclaredMethod("sleep", String.class, int.class);

        // 3.开启私有访问权限
        sleepMethod.setAccessible(true);

        // 4.调用方法 - stu.sleep("广东",4)
        // invoke(对象, Object... 实参数据)
        Object msg = sleepMethod.invoke(object, "广东", 4);
        System.out.println(msg);
    }
}
